• 先进行过滤,再分组
    1、实例:

    db.getCollection('UpMsgItem').aggregate(
    [
    {$match : {
        createTime : {$gt : 1513568964539, $lte : 1516160964542 },
        wxAppId : "wx8bd8a617c9ae66ed" }},
        {$group : {_id : "$wxOpenId"}}
    ])

    2、解释:
    match进行过滤,这里利用createTime、wxAppId两个字段进行过滤。过滤之后的数据,根据_id进行分组。$group对应的值就是分组以后返回的数据,可以在里面进行聚合操作。

  • 多个字段进行分组
    1、实例:

    db.getCollection('UpMsgItem').aggregate(
        [
        {$match : {
        createTime : {$gt : 1519613221561, $lte : 1519699621562 }}},
        {
            $group : {"_id": { "wxOpenId" : "$wxOpenId", "wxAppId": "$wxAppId"}}
        }
    ])
  • 计算分组以后的记录数:
    1、实例:

    
        db.getCollection('UpMsgItem').aggregate(
    [
    {$match : {
        createTime : {$gt : 1507508412000, $lte : 1522881012000 }}},
        {
            $group : {"_id": { "wxOpenId" : "$wxOpenId", "wxAppId": "$wxAppId"}}
        }
    ]).map(function(record, index){
            print(index);
     });
    
  • 先过滤,在进行分组、聚合操作:
    1、实例:

    db.getCollection('UpMsgItem').aggregate(
        [
        {$match : {
            createTime : {$gt : 1513568964539, $lte : 1516160964542 },
            wxAppId : "wx8bd8a617c9ae66ed" }},
            {$group : {_id : "$wxOpenId", sumCreateTime: {$sum: "$createTime"}}}
        ])

    2、解释:
    这里的sumCreateTime就是聚合后的结果,对createTime字段进行聚合。

  • group聚合操作:

$group:可以对分组的数据执行如下的表达式计算:

       $sum:计算总和。

       $avg:计算平均值。

       $min:根据分组,获取集合中所有文档对应值得最小值。

       $max:根据分组,获取集合中所有文档对应值得最大值。

       $push:将指定的表达式的值添加到一个数组中。

       $addToSet:将表达式的值添加到一个集合中(无重复值)。

       $first:返回每组第一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的第一个文档。

       $last:返回每组最后一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的最后个文档。
  • 同时使用大于、小于查询

    db.getCollection('UpMsgItem').find({
            "createTime" : {$gt : 1519556225560, $lt : 1519642625562},
            "ea" : '2'
        }).count();
  • 查看字段是否存在

    db.getCollection('log_original').find({
        exception : { $exists: true }})
  • 两个字段之间比较

    { $where : "this.updateTime > this.createTime"} 
  • 与操作:

    db.getCollection('DownMsgItem').find({createTime : {$lte :1528646400000, $gte : 1529251200000}})
  • 增加索引

db.getCollection('customer_evaluation_statistics').ensureIndex({"fsEa":1, "appId":1, "createTime" : 1})

注意点

1、mongo的update、findAndModify操作,如果没有set字段,会进行全量覆盖

参考:

http://blog.csdn.net/congcong...


Huangy远
530 声望63 粉丝

« 上一篇
Dubbo知识整理
下一篇 »
Maven 学习